package com.marketing.tenant.service;

import com.marketing.tenant.entity.TenantConfig;

import java.util.List;
import java.util.Map;

/**
 * 租户配置服务接口
 */
public interface TenantConfigService {

    /**
     * 根据租户ID获取所有配置
     * @param tenantId 租户ID
     * @return 租户配置列表
     */
    List<TenantConfig> getConfigsByTenantId(Long tenantId);

    /**
     * 根据租户ID获取配置Map（键值对形式）
     * @param tenantId 租户ID
     * @return 配置Map，key为 "configGroup.configKey"，value为配置值
     */
    Map<String, Object> getConfigMapByTenantId(Long tenantId);

    /**
     * 根据租户ID和配置组获取配置
     * @param tenantId 租户ID
     * @param configGroup 配置组
     * @return 租户配置列表
     */
    List<TenantConfig> getConfigsByGroup(Long tenantId, String configGroup);

    /**
     * 根据租户ID和配置组获取配置Map
     * @param tenantId 租户ID
     * @param configGroup 配置组
     * @return 配置Map，key为configKey，value为配置值
     */
    Map<String, Object> getConfigMapByGroup(Long tenantId, String configGroup);

    /**
     * 获取单个配置值
     * @param tenantId 租户ID
     * @param configGroup 配置组
     * @param configKey 配置键
     * @return 配置值
     */
    String getConfigValue(Long tenantId, String configGroup, String configKey);

    /**
     * 获取单个配置值，带默认值
     * @param tenantId 租户ID
     * @param configGroup 配置组
     * @param configKey 配置键
     * @param defaultValue 默认值
     * @return 配置值
     */
    String getConfigValue(Long tenantId, String configGroup, String configKey, String defaultValue);

    /**
     * 保存或更新单个配置
     * @param config 租户配置
     * @return 是否成功
     */
    boolean saveOrUpdateConfig(TenantConfig config);

    /**
     * 批量保存或更新配置
     * @param configs 配置列表
     * @return 是否成功
     */
    boolean saveOrUpdateConfigs(List<TenantConfig> configs);

    /**
     * 删除配置
     * @param tenantId 租户ID
     * @param configGroup 配置组
     * @param configKey 配置键
     * @return 是否成功
     */
    boolean deleteConfig(Long tenantId, String configGroup, String configKey);

    /**
     * 删除租户的所有配置
     * @param tenantId 租户ID
     * @return 是否成功
     */
    boolean deleteConfigsByTenantId(Long tenantId);

    /**
     * 初始化租户默认配置
     * @param tenantId 租户ID
     * @return 是否成功
     */
    boolean initDefaultConfigs(Long tenantId);

    /**
     * 获取系统默认配置模板
     * @return 默认配置列表
     */
    List<TenantConfig> getDefaultConfigTemplate();
}